package basedatos;

import genericos.Conexion;
import java.sql.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;

public class Pool{ 

    protected Stack pool=new Stack();
    BasicDataSource x=new BasicDataSource();
    protected String dbName = "zianya";
    protected String driver = "com.mysql.jdbc.Driver";
    protected String[] userpass = Conexion.userpass();
    private DataSource data;
    protected String url = "jdbc:mysql://127.0.0.1:3306/"+dbName+"?user="+userpass[0]+"&password="+userpass[1]+"&autoReconnect=true&failOverReadOnly=false&maxReconnects=10";
    /**
     * Genera Pool básico de conexión utilizando URL , contraseña y nombre
     */
public Pool(){
    x.setDriverClassName("com.mysql.jdbc.Driver");
    x.setUrl(url);
    x.setValidationQuery("select 1");
    x.setPoolPreparedStatements(true);
    data=x;
}
public Connection conectar(){
    Connection conn = null;
        try {
            conn= data.getConnection();
        } catch (SQLException ex) {
            Logger.getLogger(Pool.class.getName()).log(Level.SEVERE, null, ex);
        }
        return conn;
}

    /** Adquiere conexión del Pool o genera una nueva si el pool esta vacío
     */

    public Connection extraerConexion()
    { 
	Connection conn = null;
        try {
           // System.out.println("Pool: Conexion asignada");
            conn= data.getConnection();
        } catch (SQLException ex) {
            Logger.getLogger(Pool.class.getName()).log(Level.SEVERE, null, ex);
        }
        return conn;
    }

	   

public void liberarConexion(Connection conexion) {
        try {
            if (conexion != null) {
               // System.out.println("Pool:Liberada Conexion");
                // En realidad no cierra, solo libera la conexion.
                conexion.close();
            }else{
               // System.out.println("Pool: no es nula la conexion");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


}